package com.smallkk.zk;

import com.smallkk.user.User;
import com.smallkk.zkListen.ZkDataListener;
import com.smallkk.zkListen.ZkListener;
import org.I0Itec.zkclient.ZkClient;
import org.I0Itec.zkclient.serialize.SerializableSerializer;
import org.apache.zookeeper.CreateMode;

/**
 * Created By  醉美柳舞之众星捧月
 *
 * @author song
 * @date 2017/12/24 0:57
 */
public class zk {
    public static void main(String[] args) throws InterruptedException {
        String zkServers = "localhost:2181,localhost:2182,localhost:2183";
        // 第一个参数是连接地址和端口；第二个是超时时间(若断开在10s内重新连接可以继续会话)，第三个是连接时间，第四个是java传递的方式要实现一个序列化接口
        ZkClient zkClient = new ZkClient(zkServers, 10000, 10000, new SerializableSerializer());
        System.out.println("connection OK");

/**
 * 创建
 */
        User user = new User();
        user.setId(1);
        user.setName("laowang");

//        String path = zkClient.create("/testNode", user, CreateMode.PERSISTENT);
        String path = zkClient.create("/testNode1", user, CreateMode.PERSISTENT);
        System.out.println("创建节点成功  路径： " + path);

        /**
         * 创建一个监听事件  “注册”
         */
        zkClient.subscribeChildChanges("/testNode1", new ZkListener());
        Thread.sleep(Integer.MAX_VALUE);
        /**
         * 再来监听一个
         */
        zkClient.subscribeDataChanges("/testNode4", new ZkDataListener());
        zkClient.writeData("/testNode4", 456);

/**
 * 查看节点内容
 */
//        User user = zkClient.readData("/testNode");
//        System.out.println(user.getName());
/**
 * 查看该节点是否存在
 */
        boolean b = zkClient.exists("/testNode");
        System.out.println(b);
/**
 * 节点删除
 */
//        zkClient.delete("/testNode");
//        boolean c = zkClient.exists("/testNode");
//        System.out.println(c);
        /**
         * 更新数据
         */
//        zkClient.writeData("/testNode", "laowang1");

    }
}
